发布于 

Two Cakes [思维题]

Two Cakes [思维题]

CF Contest 542 B

题目来源:codeforces

分析

这道题其实和Wannafly Camp中的夺宝奇兵有异曲同工之妙。我们有两个人,他们分别需要从0走到n,那么我们其实可以发现对于每次从第\(i\)个走到\(i+1\)个,谁在哪个位置完全没有影响,我们只需要考虑怎么走最近即可。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <algorithm>

#define MAXN 100100

using namespace std;

int a[MAXN][2];

int main()
{
int n;
cin >> n;

for (int i = 1; i<=2*n; i++)
{
int x;
cin >> x;
if (a[x][0]==0)
a[x][0] = i;
else a[x][1] = i;
}

long long ans = 0;
ans += a[1][0] + a[1][1] - 2;
for (int i = 1; i<n; i++)
{
int min1 = abs(a[i][0] - a[i+1][0]) + abs(a[i][1] - a[i+1][1]);
int min2 = abs(a[i][0] - a[i+1][1]) + abs(a[i][1] - a[i+1][0]);

ans += min(min1, min2);
}

cout << ans << endl;
}

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

本站由 [@Songer](https://blog.songer.xyz/) 创建,使用 Stellar 作为主题。